

#include "bsabierta.h"
#include <vector>
#include "coord.h"

/*
 * Construye una curva bsplien con una cantidad "puntos" de puntos de control
 *
 *  Construye una Bspline tradicional, abierta, en donde los extremos de
 *  la curva no necesariamente interpolan los puntos de control extremos.
 *
 * Precondicion:
 *    El parametro "puntos" es la cantidad de elementos del array de Coord
 *    La cantidad de elementos debe cumplir
 *
 *    puntos > grado()
 *    (puntos - grado() - 1) % 2 == 0
 *
 * */       
BsplineAbierta::BsplineAbierta(const std::vector<Coord> &pcontrol) {
   validarIntegridad(pcontrol);
   int puntos = pcontrol.size();

   this->pcontrol.reserve(puntos);

   for(int i = 0; i < puntos; ++i){
      this->pcontrol.push_back(pcontrol[i]);
   }

}

BsplineAbierta::~BsplineAbierta() { }

Coord BsplineAbierta::centro() const {
   Coord c;
   int puntos = pcontrol.size();

   for(int i = 0; i < puntos; ++i){
      c += pcontrol[i];
   }

   return c * (1.0/puntos);
}


